﻿using System;
using System.Collections.Generic;
using MVVM_CAD.Model;

namespace MVVM_CAD.Algorithms
{
    public class Arc
    {
        public static IEnumerable<IPoint> GetArcRepresentation(IPoint p, IPoint q, IPoint k)
        {
            const double m = 0.0025;//TODO: hacer que sea mas grande cuando la distancia entre los puntos es menor y mas chico cuando es mayor.
            int i;
            var vx = (k.X - q.X);
            var ux = (k.X - p.X);
            var vy = (k.Y - q.Y);
            var uy = (k.Y - p.Y);
            var xJ = (p.X - vx); 
            var yJ = (p.Y - vy);
            ux = ux * Math.Sqrt(1-(Math.Pow(m,2)/4)) - (vx/2)*m;
            uy = uy * Math.Sqrt(1 - (Math.Pow(m, 2) / 4)) - (vy/ 2) * m;
            const double n = 0.5 * Math.PI / m;
            for (i = 0; i < n; i++)
            {
                var x = Math.Round(xJ + vx);
                var y = Math.Round(yJ + vy);
                yield return new CustomPoint(x, y);
                ux -= vx * m;
                vx += ux * m;
                uy -= vy * m;
                vy += uy * m;
            }
        }
    }
}